#ifndef __MENU_H__
#define __MENU_H__

#include <string>
#include "Types.h"

template <class T>
void showMatrix(const T &m, int columns = 8)
{

}

class Menu
{
public:
    Menu();
    ~Menu();
    void exec();

    std::string getKeyFromFileMenu();
    std::string getKeyFromHexInputMenu();
    std::string getKeyFromAutoGenerate();
    std::string getSourceFromFile();
    std::string getSourceFromInput();

    void saveDataToFileMenu(const std::string &data);
    void saveDataToFileMenu(const byte *data, size_t size);
    void ecryptShow(const std::string &data, const std::string &key);
    void ecryptMenu();


    std::string parseDataFromInput();
    void decryptShow(const std::string &data, const std::string &key);
    void decryptMenu();
    bool mainMenu();

    void clearScreen();
    void printKey(const std::string &key);
    void pinrtDataMatrix(const byte *data, size_t dataSize);
    void saveToFile(const std::string &filename, const byte *data, size_t size);

    int getch();
    int getche();
    void waitForAnyKey();
};

#endif // __MENU_H__